////
////  SPARSEMATRIX.c
////  SparseMatrix
////
////  Created by Xavier on 2023/11/20.
////
//
//#define MAXSIZE 1000
//#include <stdio.h>
//
////定义三元组
//typedef struct{
//    int row;
//    int col;
//    int val;
//} Triple;
//
////定义稀疏矩阵
//typedef struct {
//    Triple data[MAXSIZE];
//    int Matrix_Row;
//    int Matrix_Col;
//    int Matrix_SizeOf0;
//}TSMatrix;
//
////行优先
//void TransMatrixByRow(TSMatrix *M, TSMatrix *T){
//    //M是转前 T转后
//    //交换行、列  给T赋予M中的非0值
//    T->Matrix_Row = M->Matrix_Col;
//    T->Matrix_Col = M->Matrix_Row;
//    T->Matrix_SizeOf0 = M->Matrix_SizeOf0;
//    int count = 0;
//    
//    if (M->Matrix_SizeOf0) {
//        for (int i = 0; i < M->Matrix_Col; i++) {
//            for (int j = 0; j < M->Matrix_SizeOf0; j++) {
//                if ((M->data[j].col) == i) {
//                    T->data[count].col = M->data[j].row;
//                    T->data[count].row = M->data[j].col;
//                    T->data[count].val = M->data[j].val;
//                    ++count;
//                }
//            }
//        }
//    }
//}
//
////列优先
//void TransMatrixByCol(TSMatrix *M, TSMatrix *T){
//    //M是转前 T转后
//    //交换行、列  给T赋予M中的非0值
//    T->Matrix_Row = M->Matrix_Col;
//    T->Matrix_Col = M->Matrix_Row;
//    T->Matrix_SizeOf0 = M->Matrix_SizeOf0;
//    int count = 0;
//    
//    if (M->Matrix_SizeOf0) {
//        for (int i = 0; i < M->Matrix_Row; i++) {
//            for (int j = 0; j < M->Matrix_SizeOf0; j++) {
//                if ((M->data[j].row) == i) {
//                    T->data[count].col = M->data[j].row;
//                    T->data[count].row = M->data[j].col;
//                    T->data[count].val = M->data[j].val;
//                    ++count;
//                }
//            }
//        }
//    }
//}
//
//int main(int argc, const char * argv[]) {
//    TSMatrix M;
//    M.Matrix_Row = 4;       //行数
//    M.Matrix_Col = 3;       //列数
//    M.Matrix_SizeOf0 = 4;   //非0元素个数
//    
//    printf("行优先\n");
//    //给值
////    for (int i = 0; i <= M.Matrix_Row; i++) {
////        for (int j = 0; j < M.Matrix_Col; j++) {
////            M.data[j].val = 0;
////         }
////    }
//    M.data[0].row = 1;
//    M.data[0].col = 2;
//    M.data[0].val = 1;
//    
//    M.data[1].row = 2;
//    M.data[1].col = 2;
//    M.data[1].val = 3;
//    
//    M.data[2].row = 3;
//    M.data[2].col = 1;
//    M.data[2].val = 6;
//    
//    M.data[3].row = 3;
//    M.data[3].col = 2;
//    M.data[3].val = 5;
//    //打印矩阵
//    printf("矩阵：\n");
//    int index = 0;
//    for (int i = 0; i <= M.Matrix_Row; i++) {
//        for (int j = 0; j <= M.Matrix_Col; j++) {
//            if (M.data[index].row == i && M.data[index].col == j) {
//                printf("%3d", M.data[index++].val);
//
//            }else {
//                printf("%3d",0);
//            }
//        }
//        printf("\n");
//    }
//    
//    
//    printf("稀疏矩阵三元组转置前：\n");
//    for (int i = 0; i < M.Matrix_SizeOf0; i++) {
//        printf("(%d,%d,%d)\n", M.data[i].row, M.data[i].col, M.data[i].val);
//    }
//    TSMatrix T;
//    TransMatrixByRow(&M, &T);
//    printf("稀疏矩阵三元组转置后：\n");
//    for (int i = 0; i < T.Matrix_SizeOf0; i++) {
//        printf("(%d,%d,%d)\n", T.data[i].row, T.data[i].col, T.data[i].val);
//    }
//    printf("转置后的矩阵：\n");
//    index = 0;
//    for (int i = 0; i <= T.Matrix_Row; i++) {
//        for (int j = 0; j <= T.Matrix_Col; j++) {
//            if (T.data[index].row == i && T.data[index].col == j) {
//                printf("%3d", T.data[index++].val);
//            }else {
//                printf("%3d",0);
//            }
//        }
//        printf("\n");
//    }
//    printf("\n");
//    
//    printf("列优先\n");
//    TSMatrix A;
//    A.Matrix_Row = 4;       //行数
//    A.Matrix_Col = 3;       //列数
//    A.Matrix_SizeOf0 = 4;   //非0元素个数
//    
//    //给值
//    A.data[0].row = 3;
//    A.data[0].col = 1;
//    A.data[0].val = 6;
//    
//    A.data[1].row = 1;
//    A.data[1].col = 2;
//    A.data[1].val = 1;
//    
//    A.data[2].row = 2;
//    A.data[2].col = 2;
//    A.data[2].val = 3;
//    
//    A.data[3].row = 3;
//    A.data[3].col = 2;
//    A.data[3].val = 5;
//    
//    printf("稀疏矩阵三元组转置前：\n");
//    for (int i = 0; i < A.Matrix_SizeOf0; i++) {
//        printf("(%d,%d,%d)\n", A.data[i].row, A.data[i].col, A.data[i].val);
//    }
//    TSMatrix B;
//    TransMatrixByCol(&A, &B);
//    printf("稀疏矩阵三元组转置后：\n");
//    for (int i = 0; i < B.Matrix_SizeOf0; i++) {
//        printf("(%d,%d,%d)\n", B.data[i].row, B.data[i].col, B.data[i].val);
//    }
//}
